package utilidades;

import data.ConexionBD;
import java.sql.ResultSet;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author jason
 */
public class Cursos {

    ConexionBD baseDeDatos;
    Lector lector = new Lector();
    ResultSet resulset;
    ArrayList<String> listaAlumnos;
    ArrayList<String> listaCursos;
    ArrayList<String> nombreCursos;
    ArrayList<String> listaTutores;
    String nombre;

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getNivel() {
        return nivel;
    }

    public void setNivel(int nivel) {
        this.nivel = nivel;
    }

    public int getIdCurso() {
        return idCurso;
    }
    
    public int getIdCurso(String nombre,int nivel){
        int id=0;
        
        resulset = baseDeDatos.select("select id from curso where Nombre_curso='" + nombre+ "'and nivel ="+nivel);
        try {

            resulset.next();
          id=resulset.getInt(1);
         
        } catch (SQLException ex) {
            System.err.print("Error al leer el resulset");
        }
        
        
        return id;
    }

    public void setIdCurso(int idCurso) {
        this.idCurso = idCurso;
    }
    int nivel;
    int idCurso;

    public Cursos() {

        baseDeDatos = new ConexionBD();
        baseDeDatos.connect();

    }

    /**
     *
     * @param nivel especifica el nivel del curso
     * @param nombre nombre del curso.
     */
    public Cursos(int nivel, String nombre) {
        
        this.nivel=nivel;
        this.nombre=nombre;
       }
    
    public Cursos(int nivel,String nombre,int idCurso){
        
        this.nivel=nivel;
        this.nombre=nombre;
        this.idCurso=idCurso;
    }

    /**
     *
     * @param listaAlumnos Array list con la lista de Alumnos inserta tantos
     * alumnos haya en la tabla Persona indicando como id el indice, para rol
     * null nombre cogido del ArrayList y como tipo de persona Alumno.
     */
    public void altaAlumnos(ArrayList<String> listaAlumnos) {

        for (int i = 0; i < listaAlumnos.size(); i++) {
            baseDeDatos.insert("insert into Persona values(" + i + ",null,'" + listaAlumnos.get(i) + "',' ','Alumno')");
        }

    }

    /**
     * Da de alta en la tabla curso_personas.(Esta tabla es una relación
     */
    public void altacurso_persona() {

        resulset = baseDeDatos.select("select id from persona where tipo_persona='Alumno';");
        try {
            while (resulset.next()) {
                baseDeDatos.insert("INSERT INTO curso_persona VALUES(4," + resulset.getInt(1) + ")");
            }
        } catch (SQLException ex) {
            Logger.getLogger(Cursos.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void altaHorarios(int idHor, int idPersona) {
        //Se insertara tantas veces como alumnos convalidados hayan sido seleccionados
        baseDeDatos.insert("INSERT INTO horario_personal VALUES(" + idHor + ", now(), null, 'convalidacion');");
        baseDeDatos.insert("INSERT INTO persona_horario_personal VALUES(" + idPersona + "," + idHor + ")");

    }

    /**
     *
     * @param idPersona recibe el id de una persona que es tutor de un curso.
     * @return <b>String</b> devuelve una cadena con el nivel y nombre del
     * curso.
     */
    public String getNombreCurso(int idPersona) {
        String nombreCurso = "";

        resulset = baseDeDatos.select("select Nombre_curso from curso where Persona_id=" + idPersona);
        try {

            resulset.next();
            nombreCurso = resulset.getString(1);
        } catch (SQLException ex) {
            System.err.print("Error al leer el resulset");
        }

        return nombreCurso;// va a ser un unico curso o una lista de cursos?

    }
          /**
           * 
           * @param nombreCurso
           * @return 
           */
    public String getNivelCurso(String nombreCurso) {

        resulset = baseDeDatos.select("select Nivel from curso where Nombre_curso='" + nombreCurso + "' LIMIT 1;");
        try {

            resulset.next();
            nombreCurso = resulset.getString(1);

        } catch (SQLException ex) {
            System.err.print("Error al leer el resulset");
        }

        return nombreCurso;// va a ser un unico curso o una lista de cursos?

    }

    /**
     *
     * @param nombreCurso recibe el nombre del curso
     * @param nivel y el nivel de este
     * @return un <br>String </br> con el nombre del curso en cuestion
     */
    public String getModalidad(String nombreCurso, int nivel) {//Deberiamos tambien filtrar por el nivel, para que solo sea un curso
        String modalidad = "";

        resulset = baseDeDatos.select("select Modalidad.nombre from Modalidad inner join Titulo on Modalidad.id= Titulo.modalidad_id "
                + "inner join  curso on  Titulo.id=curso.titulo_id where curso.Nombre_Curso='" + nombreCurso + "' and Nivel = " + nivel);
        try {
            resulset.next();
            modalidad = resulset.getString(1);
        } catch (SQLException ex) {
            // System.out.println("No se ha devuelto ningun resultado");
            modalidad = "No se ha encontrado ningun resultado";
        }
        return modalidad;
    }

    public String getNombrePersona(int idPersona) {

        String nombre = "";

        resulset = baseDeDatos.select(" select nombre_completo from Persona where id=" + idPersona);
        try {
            resulset.next();
            nombre = resulset.getString(1);
        } catch (SQLException ex) {

            nombre = "No se ha encontrado ningun resultado";
        }
        return nombre;

    }

    /**
     *
     *
     * @param nombreCurso recibe el nombre del curso
     * @param nivel el nivel al que pertence el curso
     * @return <br>ArrayList<String></br> devuelve una lista con todos los
     * Alumnos de el curso en cuestion
     */
    public ArrayList<String> getALumnos(String nombreCurso, int nivel) {
        try {
            listaAlumnos = new ArrayList<String>();
            resulset = baseDeDatos.select("select nombre_completo from Persona inner join Curso_persona on Persona.id=Curso_persona.persona_id \n"
                    + "inner join Curso on Curso_persona.Curso_id=curso.id where curso.Nombre_curso='" + nombreCurso + "' and nivel=" + nivel);

            while (resulset.next()) {
                listaAlumnos.add(resulset.getString(1));
            }

        } catch (SQLException ex) {
            System.out.println("Error sql");
        }

        return listaAlumnos;
    }

    /**
     *
     * @return devuelve una lista con el nivel y los nombres de los cursos
     * existentes en la tabla cursos de la base de datos.
     */
    public ArrayList<String> getCursos() {

        try {
            listaCursos = new ArrayList<String>();

            resulset = baseDeDatos.select("select id,nombre_curso,nivel from curso ");
            while (resulset.next()) {
                //System.out.println(resulset.getString(1));
                listaCursos.add(resulset.getInt(3) + "º    " + resulset.getString(2) + "");
            }

        } catch (SQLException ex) {
            System.out.println("Error sql listando cursos");
        }

        return listaCursos;

    }

    /**
     *
     *
     * @return devuelve una lista completa con los nombres de cursos almacenados
     * en la base de datos.
     */
    public ArrayList<String> getNombreCursos() {

        try {
            nombreCursos = new ArrayList<String>();

            resulset = baseDeDatos.select("select nombre_curso  from curso ");
            while (resulset.next()) {
                //System.out.println(resulset.getString(1));
                nombreCursos.add(resulset.getString(1));
            }

        } catch (SQLException ex) {
            System.out.println("Error sql listando nombre cursos");
        }

        return nombreCursos;

    }

    public ArrayList<String> getListaTutores() {

        listaTutores = new ArrayList<>();

        resulset = baseDeDatos.select("select nombre_completo from persona where tipo_persona='docente'; ");
        try {
            while (resulset.next()) {
                //System.out.println(resulset.getString(1));
                listaTutores.add(resulset.getString(1));
            }
        } catch (SQLException ex) {
            Logger.getLogger(Cursos.class.getName()).log(Level.SEVERE, null, ex);
        }




        return listaTutores;

    }
}
